/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.ejb.controlador.ws;

import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.ejb.controlador.Credenciales;
import org.ejb.controlador.Login;
import org.ejb.negocio.BinjuegoFacade;
import org.ejb.negocio.JuegosFacade;
import org.ejb.negocio.UsuariosFacade;
import org.ejb.negocio.XmljuegoFacade;
import org.ejb.persistencia.Binjuego;
import org.ejb.persistencia.Juegos;
import org.ejb.persistencia.Usuarios;
import org.ejb.persistencia.Xmljuego;

/**
 *
 * @author MoisesAntonio
 */
@ApplicationScoped
@Named
public class ServicioWebController {
    
    //Tanto como Credencial, como Login son necesarios para llevar a cabo el acceso al web service.
    @Inject
    Credenciales c;
    
    
    @Inject
    Login login;
    
    //Inyectamos de la capa de negocio JuegosFacade para poder trabajar con la bbdd;
    @EJB
    JuegosFacade ejbJuegos;
    @EJB
    UsuariosFacade ejbUsuarios;
    @EJB
    BinjuegoFacade ejbBin;
    @EJB
    XmljuegoFacade ejbXml;
    
    public ServicioWebController() {}
    
    /**
     * Este método realizará el login, devolviendo el objeto Usuarios al cliente.
     * @param nombre Nombre de usuario.
     * @param pass Contraseña del usuario.
     * @return Objeto Usuarios para la gestión posterior.
     */
    public Usuarios login(String nombre, String pass){
        c.setUsername(nombre);
        c.setPassword(pass);
        login.doLogin();
        return login.getUsuario();
    }
    
    /**
     * Lista los juegos de un usuario dado
     * @param u El objeto usuario.
     * @return Lista de juegos.
     */
    public List<Juegos> listarJuegos(Usuarios u){
        return ejbUsuarios.find(u.getNombreUsuario()).getJuegosList();
    }
    
    /**
     * Devuelve el juego cuyo id se ha dado
     * @param id Id del juego a cargar.
     * @return Objeto Juegos para trabajar con el.
     */
    public Juegos cargarJuego(int id){
        return ejbJuegos.find(id);
    }
    
    /**
     * Devuelve la lista de Xml del juego (hay versiones pero no las usaré por ahora)
     * @param j Juego del que cargar los XML
     * @return Lista de Xml.
     */
    public List<Xmljuego> cargarXml(Juegos j){
        return ejbJuegos.find(j.getIdJuego()).getXmljuegoList();
    }
    
    /**
     * Devuelve la lista de binarios del juego
     * @param j Juego del que cargar los binarios.
     * @return Lista de objetos binarios.
     */
    public List<Binjuego> cargarBin(Juegos j){
        return ejbJuegos.find(j.getIdJuego()).getBinjuegoList();
    }
    
    /**
     * Crea un juego según esté formado por el objeto. Debe llevar asociado un usuario.
     * @param j Juego a crear.
     * @return Devuelve 
     */
    public Juegos crearJuego(Juegos j){
        ejbJuegos.create(j);
        return j;
    }
    
    /**
     * Sube un xml para un juego.
     * @param xml XML del juego
     */
    public void subirXml(Xmljuego xml){
        ejbXml.create(xml);
    }
    
    /**
     * Sube un binario para el juego. Debe de controlar el id el cliente.
     * @param bin Sube el binario de un juego.
     */
    public void subirBin(Binjuego bin){
        ejbBin.create(bin);
    }
    
    /**
     * Actualiza el juego dado por parametro
     * @param j Juego a actualizar
     * @return El juego ya actualizado
     */
    public Juegos actualizarJuego(Juegos j){
        ejbJuegos.edit(j);
        return j;
    }
    
    /**
     * Actualiza un Xml dado
     * @param xml Xml a actualizar
     */
    public void actualizarXml(Xmljuego xml){
        ejbXml.edit(xml);
    }
    
    /**
     * Actualiza un binario dado
     * @param bin Binario a actualizar
     */
    public void actualizarBin(Binjuego bin){
        ejbBin.edit(bin);
    }
}
